String.prototype.replaceAll  = function(s1,s2){     
    return this.replace(new RegExp(s1,"gm"),s2);     
}

//判断字符是否为空的方法
function isEmpty(obj){
    if(typeof obj == "undefined" || obj == null || obj == ""){
        return true;
    }else{
        return false;
    }
}

//向后台发送ping请求
function ping(ip) {
	$.wajax({
        type: "POST",
        url: CONTEXT_PATH + '/host/host/ping',
        data: {ip : ip},
        success: function(result) {
            layer.alert(result.msg);
        }
    });
}

function copyToClipboard (text) {
    if(text.indexOf('-') !== -1) {
        let arr = text.split('-');
        text = arr[0] + arr[1];
    }
    var textArea = document.createElement("textarea");
      textArea.style.position = 'fixed';
      textArea.style.top = '0';
      textArea.style.left = '0';
      textArea.style.width = '2em';
      textArea.style.height = '2em';
      textArea.style.padding = '0';
      textArea.style.border = 'none';
      textArea.style.outline = 'none';
      textArea.style.boxShadow = 'none';
      textArea.style.background = 'transparent';
      textArea.value = text;
      document.body.appendChild(textArea);
      textArea.select();

      try {
        var successful = document.execCommand('copy');
        var msg = successful ? '成功复制到剪贴板' : '该浏览器不支持点击复制到剪贴板';
        alert(msg);
      } catch (err) {
        alert('该浏览器不支持点击复制到剪贴板');
      }

      document.body.removeChild(textArea);
}

function showLayer(content) {
	layer.open({
		  title : '渠道服务器IP列表',
		  type: 1,
		  skin: 'layui-layer-rim', //加上边框
		  area: ['420px', '640px'], //宽高
		  content: content,
		  cancel: function(index, layero){ 
			  copyToClipboard(content.replaceAll('<br>', '\n'));
			  layer.close(index);
			  return false; 
		  }    
	});
}

var setting = {
        format: "yyyy-mm-dd",
        autoclose: true,
        todayBtn: true,
        minView: "month",
        language: "zh-CN"
    };

// 动态js跳转
function post(URL, PARAMS) { 
    var temp = document.createElement("form"); 
    temp.action = URL; 
    temp.method = "post"; 
    temp.target = "_blank";
    temp.style.display = "none"; 
    
    var opt = document.createElement("textarea"); 
	opt.name = "po"; 
	opt.value = JSON.stringify(PARAMS);

	temp.appendChild(opt);
    document.body.appendChild(temp); 
    temp.submit(); 
    return temp; 
}

$("#auto_install_game_start_date").datetimepicker(setting);

$("#gameId").select2({
	  placeholder : "请选择游戏",
	  ajax: {
	    url: CONTEXT_PATH + '/game/game/queryAll',
	    dataType: 'json',
	    
	    processResults: function (data) {
	        return {
	        	results: data.data
	        };
	      }
	  }
});

$("#gameId").on("change",function(e) {
	var gameId = $("#gameId option:checked").val();
	$('#channelId').select2({
		  placeholder : "请选择渠道",
		  ajax: {
		    url: CONTEXT_PATH + '/channel/channel/queryByGameId?gameId=' + gameId,
		    dataType: 'json',
		    
		    processResults: function (data) {
		        return {
		        	results: data.data
		        };
		      }
		  },
		  width: '100px'
	});

});


$('#channelId').on("change",function(e) {
	var gameId = $("#gameId option:checked").val();
	var channelId = $("#channelId option:checked").val();

	$('#hostId').select2({
		  placeholder : "请选择最佳部署机器",
		  ajax: {
		    url: CONTEXT_PATH + '/host/host/queryBestDeployHost?gameId=' + gameId + '&channelId=' + channelId,
		    dataType: 'json',
		    
		    processResults: function (data) {
		        return {
		        	results: data.data
		        };
		      }
		  },
		  width: '200px'
	});
});

$("#auto_install_gameId").select2({
	  placeholder : "请选择游戏",
	  ajax: {
	    url: CONTEXT_PATH + '/game/game/queryAll',
	    dataType: 'json',
	    
	    processResults: function (data) {
	        return {
	        	results: data.data
	        };
	      }
	  }
});

$("#auto_install_gameId").on("change",function(e) {
	var gameId = $("#auto_install_gameId option:checked").val();
	$('#auto_install_channelId').select2({
		  placeholder : "请选择渠道",
		  ajax: {
		    url: CONTEXT_PATH + '/channel/channel/queryByGameId?gameId=' + gameId,
		    dataType: 'json',
		    
		    processResults: function (data) {
		        return {
		        	results: data.data
		        };
		      }
		  },
		  width: '100px'
	});

});


$('#auto_install_channelId').on("change",function(e) {
	var gameId = $("#auto_install_gameId option:checked").val();
	var channelId = $("#auto_install_channelId option:checked").val();
	
	// 计算下一个服的相关信息

	$.wajax({
        type: "POST",
        url: CONTEXT_PATH + '/game/game_process/getAutoInstallInfo',
        data: {gameId: gameId, channelId : channelId},
        success: function(result) {
        	if (result.data == null) {
        		alert(result.msg);
        		// 清空"选择最佳部署机器"下拉框
            	$("#auto_install_hostId").empty();
            	$('#availableNum').html("剩余能开服数:0。不够请提前申请服务器");
        	} else {
                $('#auto_install_game_server_num').val(result.data.game_server_num);
                $('#auto_install_domain').val(result.data.game_domain);
                $('#auto_install_game_server_id').val(result.data.game_server_id);
                $('#availableNum').html("剩余能开服数:" + result.data.availableNum + "。不够请提前申请服务器");
                
                $('#auto_install_hostId').select2({
	          		  placeholder : "请选择最佳部署机器",
	          		  data : result.data.hosts,
	          		  width: '200px'
                });
          	
	          	//$('#auto_install_hostId').val(result.data.hosts[0].text);
	          	//$('#auto_install_hostId').trigger('change');
        	}
        	
        }
    });

});

/**************************************时间格式化处理************************************/
function dateFtt(fmt,date)   
{ //author: meizz   
  var o = {   
    "M+" : date.getMonth()+1,                 //月份   
    "d+" : date.getDate(),                    //日   
    "h+" : date.getHours(),                   //小时   
    "m+" : date.getMinutes(),                 //分   
    "s+" : date.getSeconds(),                 //秒   
    "q+" : Math.floor((date.getMonth()+3)/3), //季度   
    "S"  : date.getMilliseconds()             //毫秒   
  };   
  if(/(y+)/.test(fmt))   
    fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));   
  for(var k in o)   
    if(new RegExp("("+ k +")").test(fmt))   
  fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
  return fmt;   
} 

$(function(){
    $("#table").bootstrapTable({ // 对应table标签的id
        url: CONTEXT_PATH+"/game/game_process/query", // 获取表格数据的url
        cache: false, // 设置为 false 禁用 AJAX 数据缓存， 默认为true
        striped: true,  //表格显示条纹，默认为false
        pagination: true, // 在表格底部显示分页组件，默认false
        pageList: [10, 20, 50], // 设置页面可以显示的数据条数
        pageSize: 10, // 页面数据条数
        pageNumber: 1, // 首页页码
        singleSelect: false,
        toolbar: '#toolbar',
        search:true,
        striped: true,                      //隔行变色
        clickToSelect: true,                //点击选中
        showColumns: true,                  //是否显示所有的列
        showRefresh: true,                  //是否显示刷新按钮
        sidePagination: 'client', // 设置为客户端分页
//        responseHandler: function(res) {
//            return {
//                "total": res.page.total,//总页数
//                "rows": res.data   //数据
//            };
//        },
        /*
        queryParams: function (params) { // 请求服务器数据时发送的参数，可以在这里添加额外的查询参数，返回false则终止请求

            return {
                pageSize: params.limit, // 每页要显示的数据条数
                offset: params.offset, // 每页显示数据的开始行号
                sort: params.sort, // 要排序的字段
                sortOrder: params.order, // 排序规则
                dataId: $("#dataId").val() // 额外添加的参数
            }
        },*/
        sortName: 'gpId', // 要排序的字段
        sortOrder: 'desc', // 排序规则
        columns: [
            {
                checkbox: true, // 显示一个勾选框
                align: 'center' // 居中显示
            }, {
                field: 'gpId', // 返回json数据中的name
                title: '游戏服ID', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中
                sortable: true
            },{
                field: 'channel.nameEn', // 返回json数据中的name
                title: '渠道', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中,
                sortable: true
            }, {
                field: 'name', // 返回json数据中的name
                title: '游戏服名', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中
                sortable: true
            }, {
                field: 'serverId', // 返回json数据中的name
                title: 'SERVER_ID', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中
                sortable: true
            }, {
                field: 'dir', // 返回json数据中的name
                title: '目录', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中
                sortable: true
            }, {
                field: 'host.ctccIp', // 返回json数据中的name
                title: '电信ip', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中
                sortable: true,
                formatter: function (value, row, index) { 
                	if (!isEmpty(value)) {
                		return "<a href=javascript:ping('" + value + "')>" + value + "</a>"
                	}
                }
            }, {
                field: 'domain', // 返回json数据中的name
                title: '域名', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中
                sortable: true
            }, {
                field: 'createTime', // 返回json数据中的name
                title: '部署时间', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中
                sortable: true,
                formatter: function (value, row, index) { 
                	return dateFtt("yyyy-MM-dd hh:mm:ss",new Date(value));
                }
            },{
                field: 'state', // 返回json数据中的name
                title: '状态', // 表格表头显示文字
                align: 'center', // 左右居中
                valign: 'middle', // 上下居中
                sortable: true, 
                formatter: function (value, row, index) { 
                	if (value == 1) {
                		return "上线"; 
                	} else { 
                		return "下线"; 
                	} }
            }
        ],
//        onLoadSuccess: function(){  //加载成功时执行
//            //console.info("加载成功");
//        },
//        onLoadError: function(){  //加载失败时执行
//            layer.alert("数据加载失败");
//        }

    });

    $('#btn_online').click(function () {
    	$("#table").bootstrapTable('resetSearch', '上线');
    });
    
    $('#btn_offline').click(function () {
    	$("#table").bootstrapTable('resetSearch', '下线');
    });
    
    $('#btn_manual_install').click(function () {    	
        $('#manual_install_form')[0].reset();
        $('#action_type').val('manual_install');
        $('#detailModalTitle').text('手动安装游戏服');
        $('#detailModal').modal('show');
    });
    
    $('#btn_auto_install').click(function () {    	
    	$('#auto_install_form')[0].reset();
    	
        //$('#action_type').val('anto_install');
        $('#autoInstallModalTitle').text('自动安装游戏服');
        $('#autoInstallModal').modal('show');
    });


    $('#btn_edit').click(function () {
        var records = $('#table').bootstrapTable('getSelections');
        if(records.length==0){
            layer.alert('请先选择要修改的记录！');
            return;
        }
        
        if(records.length > 1){
            layer.alert('只能选择一行记录！');
            return;
        }
        
        $.wajax({
            url: CONTEXT_PATH+'/game/game_process/findById',
            data: {id: records[0].gpId},
            success: function (result) {
                if(result.code == RESULT_FAIL){
                    layer.alert(result.msg);
                    return;
                }
                for(var key in result.data){
                    $('#'+key).val(result.data[key])
                }
            }
        });

        $('#editDetailModalTitle').text('修改游戏服');
        $('#editDetailModal').modal('show');
    });
    
    $('#btn_delete').click(function () {
        var records = $('#table').bootstrapTable('getSelections');
        if(records.length==0){
            layer.alert('请先选择要删除的记录！');
            return;
        }
        
        if(records.length > 1){
            layer.alert('只能选择一行记录！');
            return;
        }
        
        layer.confirm('确认删除选中记录吗？', {
            btn: ['确定','取消'] //按钮
        }, function(){
            var id = records[0].gpId;
            $.wajax({
                url: CONTEXT_PATH + '/game/game_process/del',
                data: {id: id},
                success: function (result) {
                    layer.alert(result.msg);
                    $('#table').bootstrapTable('refresh');
                }
            });
        });
    });
    
    // 业务停服
    $('#btn_close').click(function () {
        var records = $('#table').bootstrapTable('getSelections');
        if(records.length==0){
            layer.alert('请先选择要删除的记录！');
            return;
        }
        
        layer.confirm('确认对选中记录进行业务停服吗？', {
            btn: ['确定','取消'] //按钮
        }, function(){
        	var ids = new Array();
        	for (i = 0; i < records.length; ++i) {
        		ids[i] = records[i].gpId;
        	}

            $.wajax({
                url: CONTEXT_PATH + '/game/game_process/close',
                data: {ids: ids.join()},
                success: function (result) {
                    layer.alert(result.msg);
                    $('#table').bootstrapTable('refresh');
                }
            });
        });
    });
    
    // 开启游戏进程
    $('#btn_start_game_process').click(function () {
        var records = $('#table').bootstrapTable('getSelections');
        if(records.length==0){
            layer.alert('请先选择要启动的游戏服！');
            return;
        }
        
        if(records.length > 1){
            layer.alert('只能选择一行记录！');
            return;
        }
        
        var id = records[0].gpId;

        $.wajax({
            url: CONTEXT_PATH + '/game/game_process/start',
            data: {id: id},
            success: function (result) {
                layer.alert(result.msg);
            }
        });
    });
        
    // 定时刷日志相关参数
    var logFileName = new Array(3);
    logFileName[0] = 'game_info.log';
    logFileName[1] = 'game_error.log';
    logFileName[2] = 'gc.log';
    
    var timer = new Array(3);
    
    var idName = new Array(3);
    idName[0] = 'infoLog';
    idName[1] = 'errorLog';
    idName[2] = 'gcLog';
    
    var curIndex = 0;
    
    var line = new Array(3);
    line[0] = -1;
    line[1] = -1;
    line[2] = -1;
    
    // 日志tab事件监听
    layui.use('element', function(){
    	var element = layui.element;
	  
	    element.on('tab(logTab)', function(data){
	    	if (data.index != curIndex) {
	            var records = $('#table').bootstrapTable('getSelections');
	            var dir = records[0].dir;
	            var hostId = records[0].host.hostId;
	            
	    		// 关闭旧tab的定时任务
	            clearInterval(timer[curIndex]);
	            timer[curIndex] = null;
	            
	            // 清空新tab的日志记录行数
	            line[data.index] = -1;
	            
	    		// 清空新tab的内容
	    		$('#' + idName[data.index]).val('');
	    		
	    		// 设置现在的tabIndex的值
	    		curIndex = data.index;
	    		
	    		// 开启新tab的定时器
	    		showGameLog();
	    		timer[data.index] = setInterval(showGameLog, 3000); 
	    	}
	    });
	  
	});

    // 定时获取追加日志函数
    function showGameLog(){
    	var url = CONTEXT_PATH + '/log/get';
    	var records = $('#table').bootstrapTable('getSelections');
        if(records.length==0){
            layer.alert('请先选择要查看日志的游戏进程！');
            return;
        }

        var dir = records[0].dir;
        var hostId = records[0].host.hostId;
        
    	var logFilePath = '/data/' + dir + '/game_server/logs/' + logFileName[curIndex];
        
        $.ajax({
            url: url,
            data: {logFilePath: logFilePath, hostId: hostId, curLine: line[curIndex]},
        	success: function(result){
        	    if(result.code == RESULT_FAIL){
        	    	// 停止定时器
      			  	clearTimeout(timer[curIndex]);
                    layer.alert(result.msg);
                    return;
                } else {
                	if (result.data.log != null && result.data.log != '') {
                		var consoleDiv = $('#' + idName[curIndex]);
                		consoleDiv.append(result.data.log + '<br>');
                		
                		var myDiv = consoleDiv.parent().parent().parent();

                		// 滚动到最底
                		myDiv.scrollTop(myDiv[0].scrollHeight);
	
                		line[curIndex] = result.data.nextLine;
                	}
                }
            }
        });
    }   
    
    // 查看游戏进程info日志
    $('#btn_show_game_process_log').click(function () {
    	var records = $('#table').bootstrapTable('getSelections');
        if(records.length==0){
            layer.alert('请先选择一个游戏服！');
            return;
        }
        
        if(records.length > 1){
            layer.alert('只能选择一行记录！');
            return;
        }
    	
        layer.open({
        	  type: 1,
        	  title: records[0].dir + ' 实时日志',
        	  skin: 'layui-layer-rim', //加上边框
        	  area: ['1200px', '600px'], //宽高
        	  content: '<div id="contentDiv" class="layui-tab" lay-filter="logTab">' +
        		  '<ul class="layui-tab-title">' +
	        		  '<li class="layui-this">info日志</li>' +
	        		  '<li>error日志</li>' + 
	        		  '<li>gc日志</li>' + 
        		  '</ul>' + 
        		  
        		  '<div class="layui-tab-content">' +
	        	      '<div class="layui-tab-item layui-show" id="' + idName[0] + '">' +
	        	      '</div>' +
	        	      '<div class="layui-tab-item" id="' + idName[1] + '">' + 
	        	      '</div>' +
	        	      '<div class="layui-tab-item" id="' + idName[2] + '">' + 
	        	      '</div>' +
	        	  '</div>' + 
	          '</div>',
    		  cancel: function(tabIndex, layero){ 
    			  // 停止所有定时器
				  for (var i = 0; i < timer.length; ++i) {
					  if (timer[i] != null) {
						  clearInterval(timer[i]);
					  } 
				  }
    			  // 关闭弹出层
    			  layer.close(tabIndex);
			  }    
    	});
        
        showGameLog();
        timer[0] = setInterval(showGameLog, 3000);
    });
    
    // 打印更新列表（多渠道）
    $('#btn_print_list').click(function () {
    	//页面层
    	layer.open({
    	  title: '打印更新列表（多渠道）',
    	  type: 2,
    	  skin: 'layui-layer-rim', //加上边框
    	  area: ['420px', '300px'], //宽高
    	  content: 'printList/'
    	});
    });

    // 手动装服按钮
    $('#btn_submit').click(function () {
        $("#manual_install_form").submit();
    });

    $("#manual_install_form").validate({
        rules: {
        	gameId: {
                required: true
            },
            channelId: {
                required: true
            },
            hostId: {
                required: true
            },
            game_server_num: {
                required: true
            },
            game_server_id: {
                required: true
            },
            domain: {
                required: true
            }
        },
        messages: {
        	gameId: "游戏是必填项",
        	channelId: "渠道是必填项",
        	hostId: "最佳部署机器是必填项",
        	game_server_num: "游戏服序号是必填项",
        	game_server_id: "服务器ID是必填项",
        	domain: "域名是必填项"
        },
        errorElement: "span",
        submitHandler: function(form) {
            var url = CONTEXT_PATH+'/game/game_process/manual_add';
            $.wajax({
                type: "POST",
                url: url,
                data: $(form).serialize(),
                success: function(result) {
                    layer.alert(result.msg);
                    $('#detailModal').modal('hide');
                    $('#table').bootstrapTable('refresh');
                    $(form)[0].reset();
                    // 下拉框清空
                    $("#gameId").empty();
                    $("#channelId").empty();
                    $("#hostId").empty();
                }
            });
        }
    });//End
    
    // 修改按钮
    $('#edit_btn_submit').click(function () {
        $("#edit_form").submit();
    });

    $("#edit_form").validate({
        rules: {
        	
        },
        messages: {
        	
        },
        errorElement: "span",
        submitHandler: function(form) {
            var url = CONTEXT_PATH + '/game/game_process/edit';
            
            $('#gpId').val(records[0].gpId);
            
            $.wajax({
                type: "POST",
                url: url,
                data: $(form).serialize(),
                success: function(result) {
                    layer.alert(result.msg);
                    $('#editDetailModal').modal('hide');
                    $('#table').bootstrapTable('refresh');
                    $(form)[0].reset();
                    // 下拉框清空
                    //$("#gameId").empty();
                   // $("#channelId").empty();
                    //$("#hostId").empty();
                }
            });
        }
    });//End

    // 自动装服按钮
    $('#auto_install_btn_submit').click(function () {
        $("#auto_install_form").submit();
    });

    $("#auto_install_form").validate({
        rules: {
        	gameId: {
                required: true
            },
            channelId: {
                required: true
            },
            hostId: {
                required: true
            },
            game_server_num: {
                required: true
            },
            game_server_id: {
                required: true
            },
            domain: {
                required: true
            },
            server_name : {
            	required: true
            },
            game_start_date : {
            	required: true
            }
        },
        messages: {
        	gameId: "游戏是必填项",
        	channelId: "渠道是必填项",
        	hostId: "最佳部署机器是必填项",
        	game_server_num: "游戏服序号是必填项",
        	game_server_id: "服务器ID是必填项",
        	domain: "域名是必填项",
        	server_name: "游戏服名字是必填项",
        	game_start_date: "游戏服开启时间是必填项"
        },
        errorElement: "span",
        submitHandler: function(form) {
            var url='';
            url=CONTEXT_PATH+'/game/game_process/auto_add';
            
            var index = layer.load(1, {
        		shade: [0.1,'#fff'] //0.1透明度的白色背景
        	});
            
            $.wajax({
                type: "POST",
                url: url,
                data: $(form).serialize(),
                success: function(result) {
                	// 停止转菊花
                	layer.close(index);
                    // 关闭窗口，刷新表单
                    $('#autoInstallModal').modal('hide');
                    $('#table').bootstrapTable('refresh');
                    $(form)[0].reset();
                    // 下拉框清空
                    $("#auto_install_gameId").empty();
                    $("#auto_install_channelId").empty();
                    $("#auto_install_hostId").empty();

                    // 动态post
                    post(CONTEXT_PATH+'/game/game_process/game_install_confirm', result)
                }
            });
        }
    });//End
});